<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // var a,b;    把变量声明 提升到当前script的最前面 
    // function fn() {
    //     console.log("函数调用11111111111");
    // }
    
    // JS中的代码从加载到执行经历了哪些流程?
    // 1. 语法解析 
    //    发生在代码执行之前 排查当前script中是否有语法错误 => 有错误就报错,代码不执行

    // 2. 预编译    =>   发生在代码执行之前,代码执行之前的准备工作
    // (1) 全局作用域  => 全局作用域中代码执行之前的准备工作
    // a.  变量提升     把变量声明 提升到当前script的最前面  (注意:不通过关键词声明的变量 => 全局变量  没有变量提升)
    // b.  确定函数体   把命名函数整个函数声明  提升到当前script的最前面 

    // (2) 函数作用域     函数中代码执行之前的准备工作
    // a.  变量提升     把变量声明 提升到当前函数作用域的最前面 
    // b.  确定函数体   把命名函数函数  提升到当前函数作用域的最前面 
    // c.  把实际参数赋值给形式参数  

    // 3. 解释执行  代码从上向下依次执行
    
    function fn(x,y){
        debugger;
        // var a,b;
        // function c(){  //确定函数体
        //     console.log("函数c执行了");
        // }

        // console.log(x,y);   // 10 20
        // console.log(a,b);   // undefined undefined
        // console.log(c);     // 
        
        var a = 100;
        var b = 200;
        c();

        function c(){
            console.log("函数c执行了");
        }

    }

    fn(10,20);
    


</script>
<script>
    // console.log(1111);
</script>
</html>